/**
 * 使用自定义的 Promise 类
 */
const Promise = require('./myPromise')
const fs = require('fs')

// 使用类方法 defer 拿到 Promise 实例，就可以去掉嵌套返回 Promise 实例
function read(path) {
  let dfd = Promise.defer()
  fs.readFile(path, 'utf8', (err, data) => {
    if (err) dfd.reject(err)
    console.log('文件内容为：' + data)
    dfd.resolve(data)
  })
  return dfd.promise
}

// 调用 read 函数
read('./file/a.txt').then(res => {
  // 读取第一个文件内容作为 path 继续调用 read 函数
  return read(res)
}, err => {
  console.log('读取第一个文件报错：', err)
}).then(res => {
  console.log('最终读取到的结果：' + res)
}, err => {
  console.log('读取第二个文件报错：', err)
}).then(res => {
  // 如果想在这个 then 里面终止 promise，需要返回一个新的 pending 状态的 Promise 实例
  return new Promise()
}).then(res => {
  // 如果上方的 then 不返回 pending 的实例，最后都会返回 fulfilled/rejected 的 promise 实例
  // 这样就可以继续 then 调用，bu
}, err => { })
